package com.xyy.saas.payment.service.job;

import com.xyy.saas.payment.util.ApolloUtil;

import java.util.HashMap;
import java.util.Map;

public class FBankSFTPManage {
    public static final String KEY_PINGAN = "PINGAN";
    private static final YBM ybm = new YBM();
    private static final HY hy = new HY();
    private static final PINGAN pingan = new PINGAN();
    private static final HYWXO2O hywxo2O = new HYWXO2O();
    private static final HYWXDOC hywxdoc = new HYWXDOC();
    private static final Map<String, FBankSFTP> map = new HashMap<>();

    /**
     * 域名
     * @return
     */
    public static String host(String merchantNo) {
        return map.get(merchantNo).host();
    }

    /**
     * 端口
     * @return
     */
    public static int port(String merchantNo) {
        return map.get(merchantNo).port();
    }

    /**
     * 用户名
     * @return
     */
    public static String username(String merchantNo) {
        return map.get(merchantNo).username();
    }

    /**
     * 密码
     * @return
     */
    public static String password(String merchantNo) {
        return map.get(merchantNo).password();
    }

    /**
     * 路径
     * @return
     */
    public static String dir(String merchantNo, Type type) {
        return map.get(merchantNo).dir(type);
    }

    /**
     * 微信V3秘钥
     * @param merchantNo
     * @return
     */
    public static String apiV3Key(String merchantNo) {
        return map.get(merchantNo).apiV3Key();
    }

    /**
     * 微信证书序列号
     * @param merchantNo
     * @return
     */
    public static String serialNo(String merchantNo) {
        return map.get(merchantNo).serialNo();
    }

    static {
        map.put(ybm.key(), ybm);
        map.put(hy.key(), hy);
        map.put(hywxo2O.key(), hywxo2O);
        map.put(hywxdoc.key(), hywxdoc);
        map.put(pingan.key(), pingan);
    }

    private FBankSFTPManage() {}

    /**
     * 枚举
     */
    public enum Type {
        QIFUTONG,
        JUHE,
        PINGAN_BILL
    }
}

/**
 * 接口定义
 */
interface FBankSFTP {
    /**
     * Key
     * @return
     */
     default String key() {
         return null;
     }

    /**
     * 域名
     * @return
     */
     default String host() {
         return null;
     }

    /**
     * 端口
     * @return
     */
     default int port() {
         return 0;
     }

    /**
     * 用户名
     * @return
     */
     default String username() {
         return null;
     }

    /**
     * 密码
     * @return
     */
    default String password() {
        return null;
    }

    /**
     * 路径
     * @return
     */
    default String dir(FBankSFTPManage.Type type) {
        return null;
    }

    /**
     * v3秘钥
     * @return
     */
    default String apiV3Key() {
        return null;
    }

    /**
     * 证书序列号
     * @return
     */
    default String serialNo() {
        return null;
    }
}

/**
 * 药帮忙
 */
class YBM implements FBankSFTP {
    /**
     * Key
     * @return
     */
    @Override
    public String key() {
        return "8808001031946415";
    }

    /**
     * 域名
     * @return
     */
    @Override
    public String host() {
        return "pyl8wyuvfm.fbank.com";
    }

    /**
     * 端口
     * @return
     */
    @Override
    public int port() {
        return 2222;
    }

    /**
     * 用户名
     * @return
     */
    @Override
    public String username() {
        return "8808001031946415sftp";
    }

    /**
     * 密码
     * @return
     */
    @Override
    public String password() {
        return "rVE&4o@ALSxh";
    }

    /**
     * 路径
     * @return
     */
    @Override
    public String dir(FBankSFTPManage.Type type) {
        if(FBankSFTPManage.Type.QIFUTONG == type) {
            return "/upload/";
        }
        else if(FBankSFTPManage.Type.JUHE == type) {
            return "/trade/" + key() + "/trade_reconciliation/";
        }

        throw new UnsupportedOperationException(type.name());
    }
}

/**
 * 荷叶
 */
class HY implements FBankSFTP {
    /**
     * Key
     * @return
     */
    @Override
    public String key() {
        return "8808002020762061";
    }

    /**
     * 域名
     * @return
     */
    @Override
    public String host() {
        return "pyl8wyuvfm.fbank.com";
    }

    /**
     * 端口
     * @return
     */
    @Override
    public int port() {
        return 2222;
    }

    /**
     * 用户名
     * @return
     */
    @Override
    public String username() {
        return "8808002020762061sftp";
    }

    /**
     * 密码
     * @return
     */
    @Override
    public String password() {
        return "S&G!Cmfn";
    }

    /**
     * 路径
     * @return
     */
    @Override
    public String dir(FBankSFTPManage.Type type) {
        if(FBankSFTPManage.Type.QIFUTONG == type) {
            return "/upload/";
        }
        else if(FBankSFTPManage.Type.JUHE == type) {
            return "/trade/" + key() + "/trade_reconciliation/";
        }

        throw new UnsupportedOperationException(type.name());
    }
}

class HYWXO2O implements FBankSFTP {
    @Override
    public String key() {
        return "1602773490";
    }

    /**
     * v3秘钥
     * @return
     */
    @Override
    public String apiV3Key() {
        return "QXte3BC8PUsu98eQD8V2b1htHK1m9vgd";
    }

    /**
     * 证书序列号
     * @return
     */
    @Override
    public String serialNo() {
        return "3090A97298ADB27146B227541428C61A0B0BD5B5";
    }
}

class HYWXDOC implements FBankSFTP {
    @Override
    public String key() {
        return "1611876422";
    }

    /**
     * v3秘钥
     * @return
     */
    @Override
    public String apiV3Key() {
        return "QXte3BC8PUsu98eQD8V2b1htHK1m9vgd";
    }

    /**
     * 证书序列号
     * @return
     */
    @Override
    public String serialNo() {
        return "3B9BE596F8B6E44FAC5BCBEC190F7A432FB7F635";
    }
}

/**
 * 平安银行SFTP，用于上传京东账单到SFTP，平安银行进行拉取
 */
class PINGAN implements FBankSFTP {

    @Override
    public String key() {
        return FBankSFTPManage.KEY_PINGAN;
    }

    @Override
    public String host() {
        return "47.92.0.142";
    }

    @Override
    public int port() {
        return 8822;
    }

    @Override
    public String username() {
        return "pingan";
    }

    @Override
    public String password() {
        return "hY^SEw!E#BNA^rpY";
    }

    @Override
    public String dir(FBankSFTPManage.Type type) {
        if (FBankSFTPManage.Type.PINGAN_BILL == type) {
            return ApolloUtil.getProperty("sftp.pingan.dir.bill", "/pingan/billdata/");
        }
        throw new UnsupportedOperationException(type.name());
    }

}